package cn.bouncyslime.huffmanTree.util;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 读入编码规则，将读取内容存储到Map<编码规则，字符>中
 * <p>
 * 一年前编码规则文档中存放的是char ： String
 * 当时我是在ubuntu上写的，unix的回车是\n，而windows中是\n\r，并且char在文档中存放是会改变文章结构的（区别结尾回车和编码规则的回车）
 * 所以在今天重构代码时，读取规则时出现了问题
 * 现在在文档中存放的是(int)char ： String
 * <p>
 * 这样的话在读取编码规则时就方便了很多，真的很多。。。当时太蠢
 * <p>
 * 作者： 张一卓
 * 时间： 2019/12/31 11:15
 */
public class RuleReader {
    private static String regex = "(\\d+)( : )(\\d+)";
    private static Pattern pattern = Pattern.compile(regex);

    /**
     * 读取编码规则，将其存放到Map<编码规则，字符>中
     *
     * @return Map
     */
    public static Map<String, Character> readRule() {
        Map<String, Character> map = new HashMap<>();
        try (BufferedReader reader = new BufferedReader(new FileReader("输出文件\\ruleText.txt"))) {
            Matcher matcher;
            String ruleLine;
            while ((ruleLine = reader.readLine()) != null) {
                matcher = pattern.matcher(ruleLine);
                if (matcher.find()) {
                    map.put(matcher.group(3), (char) Integer.parseInt(matcher.group(1)));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return map;
    }
}
